home *** CD-ROM | disk | FTP | other *** search
- ID:XD XDI Specification for DESQview
- Quarterdeck Technical Note
- by Daniel Travison
-
- Q: How can my device driver/TSR work better with DESQview?
-
- DESQview's External Device Interface
-
- DESQview version 2.26 (and above), can issue informative messages to third
- party software in order for that software to monitor certain DESQview
- operations such as starting a task or swapping out a process. These
- messages can be useful for determining when to allocate/deallocate
- resources (e.g., memory) on a process by process basis, communicating with
- tasks running within DESQview, rescheduling tasks, tracking DESQview's task
- switching, etc.
-
- DESQview provides this information through the External Device Interface
- (XDI) - Quarterdeck's specification for communicating with external
- drivers.
-
- An XDI driver may be implemented either as a DOS device driver (loaded by
- CONFIG.SYS), a Terminate and Stay Resident program (TSR) loaded before or
- after DESQview, or as a DESQview shared program (shared among several
- processes). For the rest of this documentation, the term 'driver' will
- normally refer to a program that uses the XDI irrespective of its method of
- implementation (device driver, TSR or shared program). Also, any number of
- XDI drivers can be loaded. When DESQview starts, it simply attaches itself
- to the XDI chain and starts sending XDI messages to to previously loaded
- XDI drivers.
-
- Within the XDI, there are 15 subfunctions (messages). Fourteen of these
- messages inform the driver what action DESQview has just performed or
- is about to perform. Your driver can choose to ignore the message and pass
- it on to the next driver in the chain, perform/schedule work based on the
- message, or save information for later use (e.g., the current mapping
- context).
-
- XDI_CHECK_PRESENCE Check for XDI driver presence
- XDI_RESERVED_SUBFUNC XDI driver custom subfunction
- XDI_START_DV DV system initialization complete
- XDI_END_DV DV system termination
- XDI_START_PROC DV process creation
- XDI_END_PROC DV process termination
- XDI_START_TASK Task creation
- XDI_END_TASK Task termination
- XDI_SAVE_STATE Task state save
- XDI_RESTORE_STATE Task state restore
- XDI_KEYBOARD Change of keyboard focus
- XDI_PROCESS_DVP Processing of DVP file complete
- XDI_SWAPPING_OUT Swap out of DV process
- XDI_SWAPPED_IN Swap in of DV process
- XDI_FAILED_DVP DV process creation failure
-
- An XDI driver can schedule second level handlers to make API calls, collect
- data, transfer data, dispatch tasks, perform initialization/termination
- when DESQview is started and quit.
-
- The fifteenth subfunction, XDI_RESERVED_SUBFUNC provides a method for
- applications to communicate with your driver without needing to grab an
- additional interrupt vector. Additionally, this interface does not require
- DESQview to be loaded. In other words, if DESQview is not loaded, the
- application and XDI driver will still be able to communicate.
-
- Q: When would I want to use the XDI specification?
-
- If your driver needs to write into an application's address space then you
- need to ensure that the address is valid when you perform the write. (e.g.,
- The DOS SETDTA call requires the caller provide a pointer to a buffer that
- will be filled in at a later time. A communications handler might use a
- similar interface but perform the update at interrupt time.) With
- DESQview, this buffer may get mapped in and out to accomodate running
- multiple programs. If your driver attempts to write into this buffer when
- DESQview has mapped some other application into it (e.g., at interrupt
- time) then you will be corrupting the unknown application. The XDI allows
- your driver to determine when the write operation is safe or specifically
- request that DESQview map the application in to allow safe access to the
- application's address space.
-
- Another example is the use of Multiplex boards. Multiplex boards have two
- important features: One, they provide access to multiple external devices
- (e.g., modems) using a single IRQ and two, they provide a software
- interface for applications. The software interface removes the need for
- the application to manage the hardware directly. In the case of a
- multiplex board providing additional serial ports, the user will often want
- to run more than one program at a time to take advantage extra serial
- ports. (e.g., A number of BBS systems provide the option for running
- multiple copies at once and also support drivers for multiplex boards.)
- The programmer writing the driver will need to accomodate simultaneous
- access to the driver as well as provide a reliable software interface.
-
- Other issues addressed by the XDI:
-
- 1) Allocation of a software interrupt to allow the application to
- communicate with the driver. With more and more device drivers and
- TSR's available, it is important to prevent possible conflicts with
- other software. The XDI specification uses the multiplex interrupt
- (INT 2Fh) as a basis for sharing a single interrupt using a well
- defined interface. Once the application has 'logged' itself with the
- driver (XDI_RESERVED_SUBFUNC), the driver might provide an ID for
- future use or simply manage it internally based on which process
- DESQview has mapped in when the software interrupt is called. This
- portion of the interface functions in the same manner whether
- DESQview is loaded or not. When DESQview is not present, the driver
- does not need to be concerned with the mapping context.
-
- 2) Allocation of memory/application that needs to be accessible at any
- given time. This might be a buffer for incoming data. Normally, the
- driver would need to allocate all of its memory needs during its
- initialization code. DESQview allows an XDI driver to allocate
- COMMON memory (memory that does not get mapped out) during an XDI
- call. This allows the driver to allocate only the memory necessary
- when a new application starts. It DESQview is not present, the
- application would allocate a buffer out of its own data space. A
- check for DESQview would be all that is necessary for the application
- to determine whether it needs to allocate a buffer or allow the
- driver to allocate it from COMMON memory.
-
- 3) Preventing reentrancy during non-reentrant sections of code. In a
- perfect world, all of your driver's code would be reentrant. Since
- this may not be practical without unreasonble code or CPU overhead,
- the XDI driver can temporarily suspend multitasking to perform its
- critical work. This does not mean that the XDI allows you to write
- non-reentrant handlers but it can solve some sticky issues that arise
- when you need to support simultaneous access.
-
- 4) The application can not keep up with the data rate. There will be
- times when the application can not empty the driver's buffer faster
- than the driver can fill it. The user may have started up a few
- extra applications and the CPU is too slow to give everyone enough
- time. The XDI driver could consider some percentage of the buffer as
- a threshold. When this threshold is reached the driver can
- temporarily override DESQview's dispatcher and force the
- application's 'buffer management' routine to execute at the next
- context switch.
-
- 5) The driver needs to know when the application exits to allow proper
- cleanup. Normally, the application itself would call the driver to
- initiate cleanup. Occasionally this will not occur (e.g., the user
- shut down the application via DESQview's Close Window menu
- selection). DESQview notifies the XDI driver when a process ends to
- allow the driver to determine if it needs to perform any cleanup for
- the process.
-
- There are other areas where an XDI driver would be of use; resource
- tracking on a process by process basis, modifying the .DVP when each
- process starts, allocating additional system memory for the process at
- startup, tracking CPU usage, or even displacing DESQview's dispatcher.
-
- Q: How do I find out more about the XDI?
-
- DESQview's XDI is fully documented in Quarterdeck's API Reference Manual
- (versions 1.20 and later). Included is a sample XDI driver (POKEXDI.ASM)
- that can be used as a template for designing your own. Contact Quarterdeck
- for information on obtaining a copy of our API Reference Manual or upgrading
- and older API Reference Manual.
-
- Copyright (C) 1990 by Quarterdeck Office Systems
- * * * E N D O F F I L E * * *
-